package solution.liuyu2783.offer;

import solution.liuyu2783.common.ListNode;

/**
 * 剑指 Offer 18. 删除链表的节点
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
	返回删除后的链表的头节点。
 *
 */
public class Q18_DeleteNode_E {

	public static void main(String[] args) {
		ListNode listNode1 = new ListNode(1);
		ListNode listNode2 = new ListNode(2);
		ListNode listNode3 = new ListNode(3);
		ListNode listNode4 = new ListNode(4);
		listNode1.next = listNode2;
		listNode2.next = listNode3;
		listNode3.next = listNode4;
		ListNode node = deleteNode(listNode1, 3);
		System.out.println(node);
	}
	
	public static ListNode deleteNode(ListNode listNode, int val) {
		if(listNode.val == val) {
			return listNode.next;
		}
		ListNode preListNode = listNode;
		ListNode curListNode = listNode.next;
		while(curListNode != null && val != curListNode.val) {
			preListNode = curListNode;
			curListNode = curListNode.next;
		}
		if(curListNode != null) {
			preListNode.next = curListNode.next;
		}
		return listNode;
	}
}
